package processus;

import java.util.LinkedList;

public class Tampon {
    
    LinkedList<String> tampon = new LinkedList<String>();
    
    /**
     * Dépose une chaîne dans le tampon
     */
    public synchronized void deposer(String chaine) {
        
        while(tampon.size() == 100) {
            try {
                wait();
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
        }
        
        // On ajoute au tampon
        tampon.add(chaine);
        
        // On réveille un fils si en attente
        notify();
    }

    /**
     * Retire une chaîne du tampon (attend si le tampon est vide)
     */
    public synchronized String retirer() {
        
        // Si rien à consommer, on attend
        while(tampon.isEmpty()) {
            try {
                wait();
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
        }
        
        // Retourne le premier élément
        String result = tampon.removeFirst();
        
        // Signale que l'on a vidé le tampon (si jamais il est plein)
        notify();
        
        return result;
    }
    
    /**
     * Renvoi TRUE si le tampon est vide
     */
    public synchronized boolean isEmpty() {
       return tampon.isEmpty();
    }
}
